﻿using System;
using Num = System.Int32;

namespace FAfx.SpectrumFish.Interfaces.Hardware
{
    public interface IMemory
    {
        Num[] Mem { get; set; }
        Num[] getScreen();
        Num readbyte(Num addr);
        void writebyte(Num addr, Num val);
    }

    public interface IPorts
    {
        void keyDown(Num evt_keyCode);
        void keyUp(Num evt_keyCode);
        Num readport(Num addr);
        void writeport(Num addr, Num val);
    }

    public interface IZ80
    {
        IMemory memory { get; set; }
        IPorts port { get; set; }

        Num a { get; set; }
        Num f { get; set; }
        Num b { get; set; }
        Num c { get; set; }
        Num d { get; set; }
        Num e { get; set; }
        Num h { get; set; }
        Num l { get; set; }

        Num a_ { get; set; }
        Num f_ { get; set; }
        Num b_ { get; set; }
        Num c_ { get; set; }
        Num d_ { get; set; }
        Num e_ { get; set; }
        Num h_ { get; set; }
        Num l_ { get; set; }
        
        Num ixh { get; set; }
        Num ixl { get; set; }
        Num iyh { get; set; }
        Num iyl{ get; set; }
        Num sp { get; set; }        
        Num pc { get; set; }

        Num r { get; set; }
        Num r7 { get; set; }
        
        Num i { get; set; }
        Num iff1 { get; set; }
        Num iff2 { get; set; }
        Num im { get; set; }

        bool halted { get; set; }
        Num tstates { get; set; }
    }
}
